package program

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"

	"gopkg.in/yaml.v3"
)

type Config struct {
	AutoAccpet      bool `yaml:"autoAccept" json:"autoAccept"`
	AutoAcceptDelay int  `yaml:"autoAcceptDelay" json:"autoAcceptDelay"`
}

func GetConfigFilePath() (string, error) {
	appDataDir, err := os.UserConfigDir()
	if err != nil {
		// 处理错误，这里可以根据实际情况进行更详细的处理
		return "", err
	}
	// 构造要写入的文件路径，在 AppData 目录下创建一个子目录和文件
	ConfigFilePath := filepath.Join(appDataDir, "LeagueBard", "config.yaml")

	// 创建目录（如果不存在）
	dir := filepath.Dir(ConfigFilePath)
	err = os.MkdirAll(dir, 0755)
	if err != nil {
		fmt.Printf("创建目录失败: %v\n", err)
		return "", err
	}

	return ConfigFilePath, nil
}

// 读取配置文件
func GetConfig() string {
	ConfigFilePath, _ := GetConfigFilePath()
	// 读取YAML文件
	var config Config
	data, err := os.ReadFile(ConfigFilePath)
	// 判断是否存在，如果不存在则创建
	if os.IsNotExist(err) {
		config.AutoAccpet = true
		config.AutoAcceptDelay = 0
		data, err = json.Marshal(&config)
		if err != nil {
			fmt.Println("配置文件格式错误", err)
			return "ERROR"
		}
		SetConfig(string(data))
	}

	err = yaml.Unmarshal(data, &config)
	if err != nil {
		fmt.Println("配置文件格式错误", err)
		return "ERROR"
	}

	jsonData, err := json.MarshalIndent(config, "", "  ")
	if err != nil {
		fmt.Println("配置文件格式错误", err)
		return "ERROR"
	}

	return string(jsonData)
}

// 设置配置文件
func SetConfig(jsonData string) bool {
	var config Config
	err := yaml.Unmarshal([]byte(jsonData), &config)
	if err != nil {
		fmt.Println("配置文件格式错误", err)
		return false
	}
	data, err := yaml.Marshal(&config)
	if err != nil {
		fmt.Println("配置文件格式错误", err)
		return false
	}
	ConfigFilePath, _ := GetConfigFilePath()
	err = os.WriteFile(ConfigFilePath, data, 0644)
	if err != nil {
		fmt.Println("配置文件写入错误", err)
		return false
	}
	fmt.Println("YAML file has been updated.")
	return true
}
